﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAO;
using LogicaNegocio;

namespace Minutero
{
    public partial class frm_AltaReunion : Form
    {
        public Proyecto proyecto;
        frmAgenda frmAg;
        public Agenda ag;
        Menu menu;
        bool editable = true;
        public frm_AltaReunion(Proyecto p, frmAgenda frmAgenda, Agenda agenda, Menu men, bool edit)
        {
            InitializeComponent();
            proyecto = p;
            CargarCombo(proyecto.IdProyecto);
            if (frmAgenda != null)
            {
                frmAg = frmAgenda;
            }
            menu = men;
            editable = edit;
            ag = agenda;
            if (agenda != null)
            {
                string fecha = ag.FechaHoraReunion.ToShortDateString();
                string hora = ag.FechaHoraReunion.ToShortTimeString();
                cb_tipoReunion.SelectedValue = ag.TipoReunionId;
                //txt_Participantes.Text = ag.Participantes;
                txt_Lugar.Text = ag.Lugar;
                txtHora.Text = hora;
                txt_duracion.Text = ag.DuracionEstimada.ToString();
                dtp_fechaReunion.Text = fecha;
            }
            btn_guardar.Visible = editable;
            btn_limpiar.Visible = editable;
        }
        //public frm_AltaReunion(Menu men, Proyecto p)
        //{

        //    InitializeComponent();
        //    CargarCombo(p.IdProyecto);
        //    btnMenu.Visible = false;
        //    menu = men;

        //}
        //public frm_AltaReunion(int r, Menu f)
        //{
        //    InitializeComponent();
        //    CargarCombo();
        //    ag = Gestor.BuscarReunion(r);
        //    string fecha = ag.FechaHoraReunion.ToShortDateString();
        //    string hora = ag.FechaHoraReunion.ToShortTimeString();
        //    cb_tipoReunion.SelectedIndex = ag.TipoReunionId;
        //    txt_Participantes.Text = ag.Participantes;
        //    txt_Lugar.Text = ag.Lugar;
        //    txtHora.Text = hora;
        //    txt_duracion.Text = ag.DuracionEstimada.ToString();
        //    dtp_fechaReunion.Text=fecha;
        //    btnMenu.Visible = false;
        //    menu = f;
        //}
        //public frm_AltaReunion(int r, frmAgenda f, bool edit, Menu m)
        //{
        //    InitializeComponent();
        //    CargarCombo();
        //    editable = edit;
        //    ag = Gestor.BuscarReunion(r);
        //    string fecha = ag.FechaHoraReunion.ToShortDateString();
        //    string hora = ag.FechaHoraReunion.ToShortTimeString();
        //    cb_tipoReunion.SelectedIndex = ag.TipoReunionId;
        //    txt_Participantes.Text = ag.Participantes;
        //    txt_Lugar.Text = ag.Lugar;
        //    txtHora.Text = hora;
        //    txt_duracion.Text = ag.DuracionEstimada.ToString();
        //    dtp_fechaReunion.Text = fecha;
        //    btnMenu.Visible = false;
        //    frmAg = f;
        //    menu = m;
        //}
        //public frm_AltaReunion(frmAgenda f, bool edit, Menu m)
        //{
        //    InitializeComponent();
        //    CargarCombo();
        //    editable = edit;
        //    btnMenu.Visible = false;
        //    frmAg = f;
        //    menu = m;
        //}
        //public frm_AltaReunion(frmAgenda frm)
        //{
        //    InitializeComponent();
        //    CargarCombo();
        //    frmAg = frm;
        //    btnMenu.Visible = false;
        //}

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void btn_limpiar_Click(object sender, EventArgs e)
        {
            cb_tipoReunion.SelectedIndex = -1;
            //txt_Participantes.Text = "";
            txt_Lugar.Text = "";
            txtHora.Text = "";
            txt_duracion.Text = "";
            dtp_fechaReunion.ResetText();
        }

        private void btn_Cancelar_Click(object sender, EventArgs e)
        {
            if (frmAg == null)
            {
                frmAg = new frmAgenda(menu,proyecto);
            }
            frmAg.Show();
            this.Close();
        }

        private void btn_guardar_Click(object sender, EventArgs e)
        {
            string fechayhora = null;
            Agenda a = new Agenda();
            if(ag!=null)
                a.IdReunion = ag.IdReunion;
            //a.Participantes = txt_Participantes.Text;
            a.Lugar = txt_Lugar.Text;
            try
            {
                a.DuracionEstimada = int.Parse(txt_duracion.Text);
                if (DateTime.Parse(dtp_fechaReunion.Text) < DateTime.Now) throw new FormatException();
                fechayhora = dtp_fechaReunion.Text + " " + txtHora.Text;
                a.FechaHoraReunion = DateTime.Parse(fechayhora);
                if(a.FechaHoraReunion<=DateTime.Now)
                {
                    MessageBox.Show("Debe Seleccionar una hora posterior a la actual.");
                    throw new FormatException();
                }
                a.TipoReunionId = int.Parse(cb_tipoReunion.SelectedValue.ToString());
            }
            catch (FormatException fm)
            {
                lbl_AgregarReunion.Visible = true;
                lbl_AgregarReunion.Text = "Ingrese una fecha y hora correcta";
                
            }
            catch (Exception ex)
            {
                lbl_AgregarReunion.Visible = true;
                lbl_AgregarReunion.Text = "No ha seleccionado un tipo de reunion";
            }
            try
            {
                List<Usuario> lista = new List<Usuario>();
                if (a.IdReunion != 0)
                {
                    DataTable dt2 = Gestor.CargarUsuariosDeReunion(a.IdReunion);
                    for (int i = 0; i < dt2.Rows.Count; i++)
                    {
                        lstParticipantes.Items.Remove(dt2.Rows[i][1].ToString());
                    }
                }
                if (lstParticipantes.Items.Count == 0 && a.IdReunion==0) throw new Exception("No ha seleccionado ningun Participante"); 
                for (int i = 0; i < lstParticipantes.Items.Count; i++)
                {
                    Usuario u = new Usuario();
                    u.Nombre_usuario = lstParticipantes.Items[i].ToString();
                    lista.Add(u);
                }
                if (lista.Count == 0) lista = null;
                try
                {
                    Gestor.InsertarAgenda(a, proyecto, lista);
                }
                catch (Exception)
                {

                    throw new Exception("Error al escribir en la Base de Datos");
                }
                
                cb_tipoReunion.SelectedIndex = -1;
                //txt_Participantes.Text = "";
                txt_Lugar.Text = "";
                txtHora.Text = "";
                txt_duracion.Text = "";
                dtp_fechaReunion.ResetText();
                lstParticipantes.Items.Clear();
                lstParticipantes.Items.Clear();
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                //MessageBox.Show("No ha seleccionado ningun participante.");
                //lbl_AgregarReunion.Visible = true;
                //lbl_AgregarReunion.Text = "No ha seleccionado ningun participante.";
            }
           
        }
        public void CargarCombo()
        {
            cb_tipoReunion.DataSource = Gestor.CargarComboTipoReunion();
            cb_tipoReunion.ValueMember = "IdTipoReunion";
            cb_tipoReunion.DisplayMember = "NombreTipoReunion";
        }
        public void CargarCombo(int tipoProyecto)
        {
            cb_tipoReunion.DataSource = Gestor.CargarComboTipoReunion(tipoProyecto);
            cb_tipoReunion.ValueMember = "IdTipoReunion";
            cb_tipoReunion.DisplayMember = "NombreTipoReunion";
        }

        private void frm_AltaReunion_FormClosed(object sender, FormClosedEventArgs e)
        {
            //if (menu != null) { menu.Show(); }
            //else { frmAg.Show(); }

            if (frmAg != null) frmAg.Show();
            else menu.Show();

            //if (menu != null) { menu.Show(); }
            //else { frmAg.Show(); }

        }

        private void btnMenu_Click(object sender, EventArgs e)
        {
            Form fm = new Menu();
            fm.Show();
        }

        private void cb_tipoReunion_SelectedIndexChanged(object sender, EventArgs e)
        {
            lbl_AgregarReunion.Visible = false;
        }

        //private void txt_Participantes_TextChanged(object sender, EventArgs e)
        //{
        //    lbl_AgregarReunion.Visible = false;

        //}

        private void frm_AltaReunion_Load(object sender, EventArgs e)
        {
            try
            {
                if (ag.IdReunion != 0) this.Text = "Modificar Reunion";
            }
            catch (Exception)
            {
            }
            
                btn_guardar.Visible = editable;
                btn_limpiar.Visible = editable;
                lstTodosUsuarios.Items.Clear();
                if (ag != null)
                {
                    CargarListaUsuariosReunion();
                    if (!editable) btnQuitar.Visible = false;
                    else btnQuitar.Enabled = false;
                    btnAgregarParticipante.Visible = editable;
                    txtFiltroParticipante.Enabled = editable;
                    if (!editable) lstTodosUsuarios.Visible = false;
                    lstTodosUsuarios.Visible = editable;
                    lblTodosParticipantes.Visible = editable;
                    lblBuscarParticipante.Visible = editable;
                    txtFiltroParticipante.Visible = editable;

                }
                else
                {
                    
                    DataTable dt = Gestor.CargarGrillaUsuarios(null);
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        lstTodosUsuarios.Items.Add(dt.Rows[i][1].ToString());

                    }
                    dtp_fechaReunion.Value = DateTime.Now.AddDays(7);
                }
        }


        private void frm_AltaReunion_FormClosing(object sender, FormClosingEventArgs e)
        {
            
        }

        private void btnAgregarParticipante_Click(object sender, EventArgs e)
        {
            try
            {
                lstParticipantes.Items.Add(lstTodosUsuarios.SelectedItem);
                lstTodosUsuarios.Items.Remove(lstTodosUsuarios.SelectedItem);
            }
            catch (Exception)
            {
                MessageBox.Show("Debe seleccionar un usuario para agregarlo.");
            }
            
        }

        private void txtFiltroParticipante_TextChanged(object sender, EventArgs e)
        {
            lstTodosUsuarios.Items.Clear();
            DataTable dt = Gestor.CargarUsuariosPorFiltro(txtFiltroParticipante.Text);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                lstTodosUsuarios.Items.Add(dt.Rows[i][1].ToString());

            }
            for (int i = 0; i < lstParticipantes.Items.Count; i++)
            {
                lstTodosUsuarios.Items.Remove(lstParticipantes.Items[i]);
            }
            //lstTodosUsuarios.Items.Remove(lstParticipantes.Items);
            //DataTable dt =Gestor.CargarGrillaUsuarios(txtFiltroParticipante.Text);
            //lstTodosUsuarios.DataSource = dt;
            ////for (int i = 0; i < dt.Rows.Count; i++)
            ////{
            //    lstTodosUsuarios.Items.Add(dt.Rows[i][0].ToString());
            //}
        }

        private void btnQuitar_Click(object sender, EventArgs e)
        {
            try
            {
                lstTodosUsuarios.Items.Add(lstParticipantes.SelectedItem);
                lstParticipantes.Items.Remove(lstParticipantes.SelectedItem);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Debe seleccionar un usuario para quitar.");
            }

        }

        private void CargarListaUsuariosReunion()
        {
            DataTable dt = Gestor.CargarUsuariosPorFiltro(txtFiltroParticipante.Text);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                lstTodosUsuarios.Items.Add(dt.Rows[i][1].ToString());

            }
            DataTable dt2 = Gestor.CargarUsuariosDeReunion(ag.IdReunion);
            for (int i = 0; i < dt2.Rows.Count; i++)
            {
                lstParticipantes.Items.Add(dt2.Rows[i][1].ToString());

            }
            for (int i = 0; i < lstParticipantes.Items.Count; i++)
            {
                lstTodosUsuarios.Items.Remove(lstParticipantes.Items[i]);
            }
        }

        private void dtp_fechaReunion_ValueChanged(object sender, EventArgs e)
        {
            //if (dtp_fechaReunion.Value < DateTime.Now)
            //{
            //    MessageBox.Show("la fecha seleccionada debe ser presente o futura.");
            //}
        }
    }
}
